/*
 * @Author: your name
 * @Date: 2021-03-22 20:30:31
 * @LastEditTime: 2021-04-08 15:54:06
 * @LastEditors: lily
 * @Description: In User Settings Edit
 * @FilePath: \js_leetcode\code\697.数组的度.js
 */
/*
 * @lc app=leetcode.cn id=697 lang=javascript
 *
 * [697] 数组的度
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */

//  思路：
//  1. 先求原数组的度使用 
//  map 存储 nums 中每个数字的出现次数，找出出现次数最多的。
//  2. 求与原数组相同度的最短子数组
//  找出第一步出现次数最多的元素 第一次和最后一次出现的位置。

//  复杂度：O(n)  O(n)

var findShortestSubArray = function (nums) {
    let obj = {}
    for (let num of nums) {
        if (obj[num]) {
            obj[num]++
        } else {
            obj[num] = 1
        }
    }
    let max = 0, maxarr = []
    for (let i in obj) {
        max = Math.max(max, obj[i])
    }
    for (let i in obj) {
        if (obj[i] === max)
            maxarr.push(parseInt(i))
    }
    let min = Infinity
    for (let num of nums) {
        if (maxarr.includes(num)) {
            let len = nums.lastIndexOf(num) - nums.indexOf(num)
            min = Math.min(min, len)
        }
    }
    return min + 1
};
// @lc code=end

console.log(findShortestSubArray([1, 2, 2, 3, 1]));